<!DOCTYPE HTML>
<html>
<!--
    https://bugzilla.mozilla.org/show_bug.cgi?id=1202095
-->
  <head>
    <title>Test for Bug 1202095</title>
    <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
    <style>
      @import url('bug1202095.css');
      @import url('bug1202095-2.css');
    </style>
  </head>
  <body>
    <script type="application/javascript">
var domUtils = SpecialPowers.Cc["@mozilla.org/inspector/dom-utils;1"]
               .getService(SpecialPowers.Ci.inIDOMUtils);

function do_test() {
  var sheet = document.styleSheets[1];
  var importRule = sheet.cssRules[0];
  is(importRule.type, SpecialPowers.Ci.nsIDOMCSSRule.IMPORT_RULE,
     "initial sheet has @import rule");

  var importedSheet = importRule.styleSheet;
  importedSheet.deleteRule(0);
  is(importedSheet.cssRules.length, 0, "imported sheet now has no rules");

  // "suffixed" refers to the "-2".
  var suffixedSheet = sheet.cssRules[1].styleSheet;
  domUtils.parseStyleSheet(suffixedSheet, "");
  is(suffixedSheet.cssRules.length, 0, "second imported sheet now has no rules");

  // Re-parse the style sheet, preserving the imports.
  domUtils.parseStyleSheet(sheet, "@import url('bug1202095.css');" +
                           "@import url('bug1202095-2.css');");
  is(sheet.cssRules[0].type, SpecialPowers.Ci.nsIDOMCSSRule.IMPORT_RULE,
     "re-parsed sheet has @import rule");
  is(sheet.cssRules[0].styleSheet, importedSheet,
     "imported sheet has not changed");
  is(sheet.cssRules[1].styleSheet, suffixedSheet,
     "second imported sheet has not changed");

  // Re-parse the style sheet, preserving both imports, but changing
  // the order.
  domUtils.parseStyleSheet(sheet, "@import url('bug1202095-2.css');" +
                           "@import url('bug1202095.css');");
  is(sheet.cssRules[0].styleSheet, suffixedSheet,
     "reordering preserved suffixed style sheet");
  is(sheet.cssRules[1].styleSheet, importedSheet,
     "reordering preserved unsuffixed style sheet");

  // Re-parse the style sheet, removing the imports.
  domUtils.parseStyleSheet(sheet, "");
  is(sheet.cssRules.length, 0, "style sheet now has no rules");

  // Re-parse the style sheet, adding one import back.  This should
  // not allow reuse.
  domUtils.parseStyleSheet(sheet, "@import url('bug1202095.css');");
  is(sheet.cssRules[0].type, SpecialPowers.Ci.nsIDOMCSSRule.IMPORT_RULE,
     "re-re-re-parsed sheet has @import rule");
  isnot(sheet.cssRules[0].styleSheet, importedSheet,
     "imported sheet has changed now");

  // Re-parse the style sheet, importing the same URL twice.
  // The style sheet should be reused once, but not two times.
  importedSheet = sheet.cssRules[0].styleSheet;
  domUtils.parseStyleSheet(sheet, "@import url('bug1202095.css');" +
     "@import url('bug1202095.css');");
  is(sheet.cssRules[0].styleSheet, importedSheet,
     "first imported sheet is reused");
  isnot(sheet.cssRules[1].styleSheet, importedSheet,
     "second imported sheet is reused");

  SimpleTest.finish();
}

SimpleTest.waitForExplicitFinish();
addLoadEvent(do_test);
    </script>
  </body>
</html>
